//拷贝对象__b中的属性 到a中， 覆盖相同的属性
window.lhp_deepcopy1=function(a,__b){
    if (typeof __b !== 'object' || __b === null) {  
        return ;  
    }  
    let stack=[]
    for (let key in __b){
        stack.push([[key],__b[key]])
    }
    while( stack.length){
        let new_stack=[]
        for (let i =0;i<stack.length;i++){
            let item=stack[i]
            let key=item[0],value=item[1]
            let temp_val=a
            let temp_b=__b
            for(let j =0;j<key.length-1;j++){temp_val=temp_val[key[j]]}
            for(let j =0;j<key.length;j++){temp_b=temp_b[key[j]]}
            //如果a 拥有b这个属性 判断是否为对象，从而进行深度遍历
            // console.log(temp_val,key[key.length-1],key,a)
            if (key[key.length-1] in temp_val){
                //为对象 则加入深度遍历队列 等待下一轮遍历
                if(typeof temp_b === 'object' && temp_val[key[key.length-1]]!=null){for (let k in temp_b){new_stack.push([ [...key, k],temp_b[k]])}}
                //不为对象  则直接覆盖
                else{
                // console.log('不拥有直接覆盖',key,temp_b)
                    temp_val[key[key.length-1]]=temp_b}
            }
            //不拥有 则直接覆盖
            else{
                // console.log('不拥有直接覆盖',key,temp_b)
                //如果是数组 则直接插入
                if (Array.isArray(temp_val)){
                    temp_val.push(temp_b)
                }else{
                //不是数组 就按照对象设置属性
                    temp_val[key[key.length-1]]=temp_b
                }
                
            }
            
        }
        stack=new_stack
    }

}
// a={"aa":{1:1}}
// b={"aa":{1:"null"}}
// lhp_deepcopy1(a,b)
// console.log(a)
// a=null;
// a={1:{3:4,1:2,e:{f:{l:{h:[3],x:[1,2,3]}},zz:22,pp:66}}},b={1:{1:3,5:6,e:{f:{l:{h:[1,2,3]}}}},2:4,d:undefined}

// lhp_deepcopy1(a,b)
// c={
//     "1": {
//         "1": 3,
//         "3": 4,
//         "5": 6,
//         "e": {
//             "f": {
//                 "l": {
//                     "h": [
//                         1,
//                         2,
//                         3
//                     ],
//                     "x": [
//                         1,
//                         2,
//                         3
//                     ]
//                 }
//             },
//             "zz": 22,
//             "pp": 66
//         }
//     },
//     "2": 4
// }
// console.log(a) 


// a={callback:null}
// b={callback:function(){console.log('zzz')}}
// lhp_deepcopy1(a,b)
// console.log("a:",a)